file chooser entry: Special-case ., .. and ~
authorMatthias Clasen <mclasen@redhat.com>
Thu, 23 Jul 2015 04:42:19 +0000 (00:42 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 23 Jul 2015 04:42:19 +0000 (00:42 -0400)
Make sure entering the three special strings ".", ".." or "~" in
the location entry works as expected. They already worked correctly
if you append a '/' to force them to be recognized as the 'folder'
part, but that should not be necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=752707

gtk/gtkfilechooserentry.c

index 821a5ee33c9fd0d5ae9b742051f7bef544b625a7..100729a114944b253e65aa798143bd0d7a95bf0b 100644 (file)
@@ -333,6 +333,14 @@ gtk_file_chooser_get_file_for_text (GtkFileChooserEntry *chooser_entry,
   return file;
 }
 
+static gboolean
+is_directory_shortcut (const char *text)
+{
+  return strcmp (text, ".") == 0 ||
+         strcmp (text, "..") == 0 ||
+         strcmp (text, "~" ) == 0;
+}
+
 static GFile *
 gtk_file_chooser_get_directory_for_text (GtkFileChooserEntry *chooser_entry,
                                          const char *         text)
@@ -344,7 +352,9 @@ gtk_file_chooser_get_directory_for_text (GtkFileChooserEntry *chooser_entry,
   if (file == NULL)
     return NULL;
 
-  if (text[0] == 0 || text[strlen (text) - 1] == G_DIR_SEPARATOR)
+  g_print ("text '%s', folder '%s'\n", text, g_file_get_path (file));
+  if (text[0] == 0 || text[strlen (text) - 1] == G_DIR_SEPARATOR ||
+      is_directory_shortcut (text))
     return file;
 
   parent = g_file_get_parent (file);
@@ -833,6 +843,8 @@ _gtk_file_chooser_entry_get_file_part (GtkFileChooserEntry *chooser_entry)
   last_slash = strrchr (text, G_DIR_SEPARATOR);
   if (last_slash)
     return last_slash + 1;
+  else if (is_directory_shortcut (text))
+    return "";
   else
     return text;
 }